package org.example.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component("Aspect4")
@Aspect
public class Aspect4
{
    //aspectj的advice通知增强类，无需实现任何接口

        //作用：目标代码出现异常，通知执行。记录异常日志、通知管理员（短信、邮件）
        //只有目标对象方法抛出异常，通知才会执行
        //参数1：静态连接点（方法对象）
        //参数2：目标方法抛出的异常，参数名随便，但也不能太随便
    //抛出通知
        //切入点表达式：增强所有org包以及子包下面的所有类型的bean的所有方法
        @AfterThrowing(value="within(org..*)",throwing="ex")
        public void afterThrowing(JoinPoint joinPoint, Throwable ex){
            //一旦发生异常，发送邮件或者短信给管理员
            System.out.println("++管理员您好，"+joinPoint.getTarget().getClass().getName()+"的方法："
                    +joinPoint.getSignature().getName()+"发生了异常，异常为："+ex.getMessage());
        }
}
